// class MinStack {
// public:
//     stack<int> s;
//     vector<int> v1;
//     vector<int> v2;
//     MinStack() {
//     }
    
//     void push(int val) {
//         s.push(val);
//         v1.push_back(val);
//     }
    
//     void pop() {
//         s.pop();
//         v1.pop_back();
//     }
    
//     int top() {
//         return s.top();
//     }
    
//     int getMin() {
//         v2=v1;
//         sort(v2.begin(),v2.end());
//         return v2[0];
//     }
// };



class MinStack {
public:
    stack<int> s;
    stack<int> minstack;
    MinStack() {
    }
    
    void push(int val) {
        s.push(val);
        if(minstack.empty()||val<=minstack.top()){
            minstack.push(val);
        }
    }
    
    void pop() {
        if(minstack.top()==s.top()){
            minstack.pop();
        }
        s.pop();
        
    }
    
    int top() {
        return s.top();
    }
    
    int getMin() {
        return minstack.top();
    }
};




/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */
